package org.hilo.boot.core.mapper;

import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.UpdateProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;

import java.util.List;

/**
 * 
 * @author zollty
 * @since 2023年7月24日
 * @param <T>
 */
@RegisterMapper
public interface UpdateWithForceNullColumnsMapper<T> {

    /**
     * 根据主键更新属性不为null的值, 指定的属性(null值)会被强制更新
     *
     * @param record 不为null的属性都会被更新。（空字符串取决于mybatis配置）
     * @param forceNullColumns  指定要更新为null的列，例如 UserEnity::getName, UserEnity::getAge
     * @return
     */
    @UpdateProvider(type = UpdateWithForceNullColumnsProvider.class, method = "dynamicSQL")
    @Options(useCache = false, useGeneratedKeys = false)
    int updateWithForceNullColumns(@Param("record") T record, @Param("forceNullColumns") List<String> forceNullColumns);
}
